﻿/******************************************************************************************************/
//файл ./Extentions/ImageWork.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Drawing.Imaging;
using System.Drawing;

namespace Cinematograph.Extentions
{
public static class ImageWork
{
public static Image Resize(this Image img, int MaxWidth, int MaxHeight)
{
    double resultWidth = 0;
    double resultHeight = 0;

    // Определяем новые размеры картинки.
    // Если она меньше максимального размера, то оставляем её без изменения.
    // Если хотя бы по одному измерению больше максимального размера,
    // то уменьшаем её пропорционально до максимального размера.
    if (img.Height == MaxHeight && img.Width == img.Width)
    {
        return img;
    }
    else
    {
        //Непропорционально, нужно обрезать горизонтальную полосу
        if ((double)img.Height / (double)MaxHeight > (double)img.Width / (double)MaxWidth)
        {
            resultWidth = (double)img.Width;
            resultHeight = ((double)img.Width / (double)MaxWidth) * (double)MaxHeight;
        }

        //непропорционально, нужно обрезать вертикальную полосу
        else
        {
            resultWidth = ((double)img.Height / (double)MaxHeight) * (double)MaxWidth;
            resultHeight = (double)img.Height;
        }
    }
    Rectangle rect = new Rectangle
    {
        X = (img.Width - (int)resultWidth) / 2,
        Y = (img.Height - (int)resultHeight) / 2,
        Width = (int)resultWidth,
        Height = (int)resultHeight
    };
    return new Bitmap(img).Clone(rect, img.PixelFormat);
}


public static bool ResizeAndSave(this HttpPostedFileBase imagefile, string strSavePath, int maxImageSize, int MaxWidth, int MaxHeight)
{
    if (imagefile != null)
    {

        switch (System.IO.Path.GetExtension(strSavePath).ToLower())
        {
            case ".gif": break;

            case ".jpg": break;

            case ".jpeg": break;

            case ".png": break;
            default: return false;
        }

        if (imagefile.ContentLength > maxImageSize)
        {
            return false;
        }

        else
        {
            if (System.IO.File.Exists(strSavePath))
            {
                System.IO.File.Delete(strSavePath);
            }
            Image.FromStream(imagefile.InputStream).Resize(MaxWidth, MaxHeight).Save(strSavePath);
            return true;
        }

    }
    return false;
}
}
}